--- wine1.5-1.5.29.orig/dlls/winex11.drv/opengl.c
+++ wine1.5-1.5.29/dlls/winex11.drv/opengl.c
@@ -1840,31 +1840,33 @@ static BOOL glxdrv_wglShareLists(struct
      * current or when it hasn't shared display lists before.
      */
 
-    if((org->has_been_current && dest->has_been_current) || dest->has_been_current)
+    if (dest->sharing)
     {
-        ERR("Could not share display lists, one of the contexts has been current already !\n");
+        ERR("Could not share display lists because 'dest' has already shared lists before\n");
         return FALSE;
     }
-    else if(dest->sharing)
+    if (NtCurrentTeb()->glContext == dest)
     {
-        ERR("Could not share display lists because hglrc2 has already shared lists before\n");
-        return FALSE;
+        FIXME("'dest' context is current.\n");
+//         return FALSE;
     }
-    else
-    {
-        describeContext(org);
-        describeContext(dest);
 
-        /* Re-create the GLX context and share display lists */
-        pglXDestroyContext(gdi_display, dest->ctx);
-        dest->ctx = create_glxcontext(gdi_display, dest, org->ctx);
-        TRACE(" re-created an OpenGL context (%p) for Wine context %p sharing lists with OpenGL ctx %p\n", dest->ctx, dest, org->ctx);
-
-        org->sharing = TRUE;
-        dest->sharing = TRUE;
-        return TRUE;
+    if (dest->has_been_current)
+    {
+        FIXME("'dest' context has been current already, this might break terribly!\n");
     }
-    return FALSE;
+
+    describeContext(org);
+    describeContext(dest);
+
+    /* Re-create the GLX context and share display lists */
+    pglXDestroyContext(gdi_display, dest->ctx);
+    dest->ctx = create_glxcontext(gdi_display, dest, org->ctx);
+    TRACE(" re-created an OpenGL context (%p) for Wine context %p sharing lists with OpenGL ctx %p\n", dest->ctx, dest, org->ctx);
+
+    org->sharing = TRUE;
+    dest->sharing = TRUE;
+    return TRUE;
 }
 
 static void wglFinish(void)
